博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
django之分页,纯python代码
阅读量:5256 次
发布时间:2019-06-14

本文共 4227 字,大约阅读时间需要 14 分钟。

Django中分页

py文件代码

"""自定义分页组件可以返回分页的数据和分页的HTML代码"""from django.http import QueryDictclass Pagination(object):    def __init__(self, current_page, total_count, url_prefix, query_dict=QueryDict(mutable=True), per_page=10,                 show_page=9):        """        初始化分分页器        :param url_prefix: a标签的URL前缀        :param current_page: 当前页码数        :param total_count: 数据总数        :param query_dict: 空的QueryDict()对象,并且是可修改的        :param per_page: 每一页显示多少数据, 默认值是10        :param show_page: 页面显示的页码数, 默认值是9        """        # 0.分页的URL前缀        self.url_prefix = url_prefix        self.query_dict = query_dict        # 1. 每一页显示10条数据        self.per_page = per_page        assert per_page > 0        # 2. 计算需要多少页        total_page, more = divmod(total_count, per_page)        if more:            total_page += 1        self.total_page = total_page        # 3. 当前页码        try:            current_page = int(current_page)        except Exception as e:            current_page = 1        current_page = total_page if current_page > total_page else current_page        # 页码必须是大于0的数        if current_page < 1:            current_page = 1        self.current_page = current_page        # 4. 页面最多显示的页码数        self.show_page = show_page        # 5. 最多显示页码的一半        self.half_show_page = self.show_page // 2    @property    def start(self):        # 数据切片的开始位置        return self.per_page * (self.current_page - 1)    @property    def end(self):        # 数据切片的结束为止        return self.current_page * self.per_page    # 定义一个返回HTML代码的方法    def page_html(self):        # 如果总页码数小于最大要显示的页码数        if self.total_page < self.show_page:            show_page_start = 1            show_page_end = self.total_page        # 左边越界        elif self.current_page - self.half_show_page < 1:            show_page_start = 1            show_page_end = self.show_page        # 右边越界        elif self.current_page + self.half_show_page > self.total_page:            show_page_end = self.total_page            show_page_start = self.total_page - self.show_page + 1        else:            show_page_start = self.current_page - self.half_show_page            # 页面显示页码的结束            show_page_end = self.current_page + self.half_show_page        # 生成分页的HTML代码        page_list = []        # 添加分页代码的前缀        page_list.append('
') page_html = ''.join(page_list) return page_html

实例化对象

  1. def dashboard(request):    # 获取当前网页路径    url_prefix = request.path_info    # 获取当前页码数    current_page = request.GET.get('page', 1)    # 获取所有客户的信息    customer_list = Customer.objects.all()    # 实例分页代码    pagination = Pagination(current_page=current_page, total_count=customer_list.count(), url_prefix=url_prefix, per_page=8)    # 获取当前页的数据    data = customer_list[pagination.start:pagination.end]    page_html = pagination.page_html()    return render(request, "Dashboard.html", {'customer_list': data, "page_html": page_html})

前端代码

  1. {
    { page_html|safe }}

使用django脚本去创建数据

  1. 批量创建数据
    1. 使用Django脚本去创建数据
    2. bulk_create()
  2. 分页
    1. 纯Python基础写的,
    2. django里面获取当前url
      1. request.path_info 获取当前路径
      2. request.get_full_path 获取全路径

实际样式

转载于:https://www.cnblogs.com/yuncong/p/10471452.html

你可能感兴趣的文章
针对sl的ICSharpCode.SharpZipLib,只保留zip,gzip的流压缩、解压缩功能
查看>>
【转】代码中特殊的注释技术——TODO、FIXME和XXX的用处
查看>>
【SVM】libsvm-python
查看>>
Jmeter接口压力测试,Java.net.BindException: Address already in use: connect
查看>>
Leetcode Balanced Binary Tree
查看>>
Leetcode 92. Reverse Linked List II
查看>>
九.python面向对象(双下方法内置方法)
查看>>
go:channel(未完)
查看>>
[JS]递归对象或数组
查看>>
LeetCode(17) - Letter Combinations of a Phone Number
查看>>
Linux查找命令对比(find、locate、whereis、which、type、grep)
查看>>
路由器外接硬盘做nas可行吗?
查看>>
python:从迭代器,到生成器,再到协程的示例代码
查看>>
Java多线程系列——原子类的实现(CAS算法)
查看>>
在Ubuntu下配置Apache多域名服务器
查看>>
多线程《三》进程与线程的区别
查看>>
linux sed命令
查看>>
html标签的嵌套规则
查看>>
[Source] Machine Learning Gathering/Surveys
查看>>
HTML <select> 标签
查看>>